package com.itmk.web.role.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itmk.utils.ResultUtils;
import com.itmk.utils.ResultVo;
import com.itmk.web.role.entity.*;
import com.itmk.web.role.service.RoleService;
import com.itmk.web.role_menu.service.RoleMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 角色控制器
 * 处理与角色相关的HTTP请求
 */
@RestController
@RequestMapping("/api/role")
public class RoleController {

    @Autowired
    private RoleService roleService; // 角色服务，用于处理角色相关的业务逻辑

    @Autowired
    private RoleMenuService roleMenuService; // 角色菜单服务，用于处理角色与菜单的关联关系

    /**
     * 获取角色列表
     * @param parm 分页查询参数
     * @return 返回角色列表的分页结果
     */
    @GetMapping("/list")
    public ResultVo list(RoleParm parm){
        IPage<Role> list = roleService.list(parm);
        return ResultUtils.success("查询成功",list);
    }

    /**
     * 新增角色
     * @param role 角色信息
     * @return 返回操作结果，成功或失败
     */
    @PostMapping
    public ResultVo addRole(@RequestBody Role role){
        boolean save = roleService.save(role);
        if(save){
            return ResultUtils.success("新增角色成功!");
        }
        return ResultUtils.error("新增角色失败!");
    }

    /**
     * 编辑角色
     * @param role 角色信息
     * @return 返回操作结果，成功或失败
     */
    @PutMapping
    public ResultVo editRole(@RequestBody Role role){
        boolean save = roleService.updateById(role);
        if(save){
            return ResultUtils.success("编辑角色成功!");
        }
        return ResultUtils.error("编辑角色失败!");
    }

    /**
     * 删除角色
     * @param roleId 角色ID
     * @return 返回操作结果，成功或失败
     */
    @DeleteMapping("/{roleId}")
    public ResultVo deleteRole(@PathVariable("roleId") Long roleId){
        // 检查角色是否绑定了用户
        if(roleMenuService.selectBindRole(roleId)){
            return ResultUtils.error("删除角色失败!该角色存在绑定用户！");
        }

        // 删除角色
        boolean save = roleService.removeById(roleId);
        if(save){
            return ResultUtils.success("删除角色成功!");
        }
        return ResultUtils.error("删除角色失败!");
    }

    /**
     * 获取分配权限树
     * @param parm 分配权限参数
     * @return 返回权限树信息
     */
    @GetMapping("/getAssignTree")
    public ResultVo getAssignTree(RoleAssignParm parm){
        RolePermissionVo assignTree = roleService.getAssignTree(parm);
        return ResultUtils.success("获取成功",assignTree);
    }

    /**
     * 保存分配的权限
     * @param parm 分配权限参数
     * @return 返回操作结果，成功或失败
     */
    @PostMapping("/saveAssign")
    public ResultVo saveAssign(@RequestBody RolePermissionParm parm){
        roleService.saveAssign(parm);
        return ResultUtils.success("分配权限成功!");
    }

    /**
     * 获取角色列表，不需要参数
     * @return 返回所有角色列表
     */
    @GetMapping("/getList")
    public ResultVo getList(){
        List<Role> list = roleService.list();
        return ResultUtils.success("成功",list);
    }

}
